@DVJob
/*

      Dieser Hintergrundjob ermöglicht eine Vereinfachte Eingabe von 
      Auszahlungen an Flüchtlinge.
      
      Hierzu werden die Zusatzfelder "Taschengeld" und "Bekleidung"
      in den Eingabebereich "Auszahlungen an den Flüchtling" umkopiert.
      
      Dort wird das Feld "Buchung" mit dem jeweils eingetragenen
      Wert sowie die Zusatzfelder "DatumVon" und "DatumBis" mit den
      aus dem Eingabewert abgeleiteten Datumsangaben gefüllt.
      Über das Feld "Kategorie" erkennen Sie, ob die Angaben aus dem 
      Feld "Taschengeld" oder "Bekleidung" stammen.

      Es werden folgende Abkürzungen ausgewertet:

      M           - numerische Monatsangabe (z.B. "5")
                    -> Anfang/Ende des entsprechenden Monats
                    sofern der Monat später als der aktuelle Folgemonat liegen würde,
                    wird auf das Vorjahr verwiesen.
                    Im Januar meint die Eingabe von "3" den März des Vorjahres
      -T.         - numerische Tagesangabe (z.B. "-15.")
                    -> Zeitraum bis zu dem Tag im aktuellen Monat
      T.-         - numerische Tagesangabe (z.B. "15.-")
                    -> Zeitraum ab dem Tag im aktuellen Monat
      T.-T.       - numerischer Tages-Bereich (z.B. "3.-6.")
                    -> Zeitraum von/bis zu dem Tag im aktuellen Monat
      T.M.-T.M.   - numerischer Datumsbereich (z.B. "1.2.-4.3.")
                    -> Zeitraum im aktuellen Jahr
                    sofern der Monat später als der aktuelle Folgemonat liegen würde,
                    wird auf das Vorjahr verwiesen.
                    Im Januar meint die Eingabe von "3" den März des Vorjahres
      T-M.J-T.M.J - Numerische Datumsangaben (z.b. "1.1.20-1.2.21")
      
      Sollte der Anfangs- vor dem End-Tag liegen, werden  die beiden Werte vertauscht
*/

// Der Job wird stündlich aufgerufen, die Aktion soll um 20:00 durchgeführt werden
if (DateTime.Now.Hour!=20) 
    return;
    
// Felddaten auslesen
var tGeld      = fm.GetDynamikFeld(DynBereiche.Fluechtlinge,"Taschengeld");
var Bekleidung = fm.GetDynamikFeld(DynBereiche.Fluechtlinge,"Bekleidung");
var dVon       = fm.GetDynamikFeld(DynBereiche.Finanzen,"DatumVon");
var dBis       = fm.GetDynamikFeld(DynBereiche.Finanzen,"DatumBis");

// Suchausdrücke für die Abkürzungs-Auswertung
var rxMonat=new Regex(@"^[0-9]+$");
var rxBisTag=new Regex(@"^\-([0-9]+)\.$");
var rxVonTag=new Regex(@"^([0-9]+)\.\-$");
var rxVonBisTag=new Regex(@"^([0-9]+)\.\-([0-9]+)\.$");
var rxVonBisTagMonat=new Regex(@"^([0-9]+)\.([0-9]+)\.\-([0-9]+)\.([0-9]+)\.$");
var rxVonBisTagMonatJahr=new Regex(@"^([0-9]+)\.([0-9]+)\.([0-9]+)\-([0-9]+)\.([0-9]+)\.([0-9]+)$");

int AktJahr=DateTime.Today.Year;
int AktMon=DateTime.Today.Month;
int NextMon=AktMon+1;
for (int i=0;i<=2;i++) {
  var df=(i==0)?tGeld:Bekleidung;
  var Kat=(i==0)?"Taschengeld":"Bekleidung";
  if (df!=null)
    foreach (var fl in fm.GetFluechtlingeDF(df)) {
      /*
        Auswertung der Abkürzungen
      */
      Match m;
      int tag,monat,jahr;
      DateTime dtVon,dtBis;
      Tools.Monat(DateTime.Today,out dtVon,out dtBis);
      var s=fl.GetDyn(fm,df);
      m=rxMonat.Match(s);
      if (m.Success) {
         monat=Tools.GetInt(s);
         jahr =AktJahr;
         Tools.Monat(new DateTime((monat>NextMon)?jahr-1:jahr,monat,1),out dtVon,out dtBis);
      }
      m=rxBisTag.Match(s);
      if (m.Success)
         dtBis=new DateTime(AktJahr,AktMon,Tools.GetInt(m.Groups[1].Value));
      m=rxVonTag.Match(s);
      if (m.Success)
         dtVon=new DateTime(AktJahr,AktMon,Tools.GetInt(m.Groups[1].Value));
      m=rxVonBisTag.Match(s);
      if (m.Success) {
         dtVon=new DateTime(AktJahr,AktMon,Tools.GetInt(m.Groups[1].Value));
         dtBis=new DateTime(AktJahr,AktMon,Tools.GetInt(m.Groups[2].Value));
      }
      m=rxVonBisTagMonat.Match(s);
      if (m.Success) {
         tag  =Tools.GetInt(m.Groups[1].Value);
         monat=Tools.GetInt(m.Groups[2].Value);
         jahr =AktJahr;
         dtVon=new DateTime((monat>NextMon)?jahr-1:jahr,monat,tag);
         tag  =Tools.GetInt(m.Groups[3].Value);
         monat=Tools.GetInt(m.Groups[4].Value);
         jahr =AktJahr;
         dtBis=new DateTime((monat>NextMon)?jahr-1:jahr,monat,tag);
      }
      m=rxVonBisTagMonatJahr.Match(s);
      if (m.Success) {
         tag  =Tools.GetInt(m.Groups[1].Value);
         monat=Tools.GetInt(m.Groups[2].Value);
         jahr =Tools.GetInt(m.Groups[3].Value);
         dtVon=new DateTime((jahr<100)?(jahr+2000):jahr,monat,tag);
         tag  =Tools.GetInt(m.Groups[4].Value);
         monat=Tools.GetInt(m.Groups[5].Value);
         jahr =Tools.GetInt(m.Groups[6].Value);
         dtBis=new DateTime((jahr<100)?(jahr+2000):jahr,monat,tag);
      }
      /*
        Daten speichern
      */
      var fi=fm.NewItem<IFinanz>();
      fi.Fluechtling=fl;
      fi.Kategorie=Kat;
      fi.Buchung=fl.GetDyn(fm,df);
      fi.Datum=DateTime.Today;
      if (dtVon>dtBis) {
        // Angaben vertauscht
        fi.SetDyn(fm,dVon,Tools.GetString(dtBis));
        fi.SetDyn(fm,dBis,Tools.GetString(dtVon));
      } else {
        fi.SetDyn(fm,dVon,Tools.GetString(dtVon));
        fi.SetDyn(fm,dBis,Tools.GetString(dtBis));
      }
      fi.DatenSpeichern(fm);

      // Eintragung im Dynamikfeld löschen
      fl.SetDyn(fm,df,"");
      fl.DatenSpeichern(fm);
    }
}
